Evolution in Switzerland and Western Europe
The figures do not represent the same thing in each country, depending on the extent of the screening tests carried out. Regardless of this problem, the weekly and daily trend curves allow you to get an idea of the foreseeable evolution for the next days (assuming that the screening strategy does not change over time). Respectively, it provides an indication of a possible inflection of the progression of the epidemic in the near future.
IMPORTANT NOTE: The graphics below show values provided by official sources between 0 and 48h before the last update of this document. As an exemple, for Switzerland, you’ll see the values up to October 22 at 12AM, even though the gaphics were update on October 24 at 1AM! This is due to the lag between the time slot for communicating official figures and the time slot used by Johns Hopkins CSSE for releasing in their Git repository the aggregated figures for all official sources.
What Happened in Hubei Province (China)





Comparison of Number of Confirmed Cases in Western Europe



Comparison of Number of Deaths in Western Europe



Comparison of Number of Recovered Cases in Western Europe


Comparison of Number of Active Cases in Western Europe


LS0tCnRpdGxlOiAiQ09WSUQtMTkgaW4gU3dpdHplcmxhbmQgYW5kIFdlc3Rlcm4gRXVyb3BlIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogCiAgICBmaWdfaGVpZ2h0OiA1CiAgICBmaWdfd2lkdGg6IDcKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2M6IHllcwogIGh0bWxfZG9jdW1lbnQ6IAogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIHRvYzogeWVzCiAgd29yZF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogIHBkZl9kb2N1bWVudDogZGVmYXVsdApkYXRlOiAiTGFzdCB1cGRhdGVkOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWSAtICVIOiVNJylgIgphdXRob3I6ICJQaGlsaXBwZSBEb2NvdXJ0IgotLS0KCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KGRhdGEudGFibGUpCgpnZXRfdGltZXNlcmllc19hc192ZWN0b3IgPC0gZnVuY3Rpb24oZGYpIHsKICB0bXAgPC0gc3Vic2V0KGRmLCBzZWxlY3QgPSAtYygxOjQpKQogIHRtcCA8LSBzYXBwbHkoYXMudmVjdG9yKHRyYW5zcG9zZSh0bXApKSwgYXMuaW50ZWdlcikKICByZXR1cm4odG1wKQp9CgpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5IDwtIGZ1bmN0aW9uKGNvdW50cnkuY29uZmlybWVkLCBjb3VudHJ5LmRlYXRocywgY291bnRyeS5yZWNvdmVyZWQsIGNvdW50cnkucG9wdWxhdGlvbj1OQSwgY291bnRyeS5uYW1lPSIiLCBwdWJsaWMuc3BhY2VzLmNsb3NlZC5hdD1OQSwgY29uZmluZW1lbnQuYXQ9TkEsIHRyZW5kLmFuZ2xlPTIwKSB7CiAgZGF5LmNvdW50IDwtIG5yb3coY291bnRyeS5jb25maXJtZWQpCiAgCiAgeWxpbSA8LSBjKDAsIDEuMzUgKiBtYXgoY291bnRyeS5jb25maXJtZWQsIG5hLnJtID0gVFJVRSkpCiAgZGF5LnN0YXJ0IDwtIG1pbihjKDQ1LCBwdWJsaWMuc3BhY2VzLmNsb3NlZC5hdCwgY29uZmluZW1lbnQuYXQpLCBuYS5ybSA9IFRSVUUpCiAgcGxvdChjb3VudHJ5LmNvbmZpcm1lZCwgbWFpbj0gcGFzdGUoIkNhc2VzIGluIiwgY291bnRyeS5uYW1lKSwgdHlwZSA9ICJvIiwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIkN1bXVsYXRlZCBOdW1iZXIgb2YgQ29uZmlybWVkIENhc2VzIiwgY29sID0gInJlZCIsIHhsaW0gPSAgYyhkYXkuc3RhcnQsIGRheS5jb3VudCArIDE1KSwgeWxpbSA9IHlsaW0pCiAgbGluZXMoc2VxKDEsIGxlbmd0aChjb3VudHJ5LmRlYXRocykpLCBjb3VudHJ5LmRlYXRocywgdHlwZSA9ICJsIiwgY29sID0gImJsYWNrIiwgbHR5ID0gMSwgbHcgPSAxKQogIGxpbmVzKHNlcSgxLCBsZW5ndGgoY291bnRyeS5yZWNvdmVyZWQpKSwgY291bnRyeS5yZWNvdmVyZWQsIHR5cGUgPSAibCIsIGNvbCA9ICJncmVlbiIsIGx0eSA9IDEsIGx3ID0gMSkKICBncmlkKCkKICAKICAjIFRyZW5kIGJhc2VkIG9uIGxhc3QgdHdvIG9ic2VydmF0aW9ucyAobGFzdCBkYXkpLgogIGxhc3QuY29uZmlybWVkIDwtIHRhaWwoY291bnRyeS5jb25maXJtZWQsIG4gPSAyKQogIGR5IDwtbGFzdC5jb25maXJtZWRbMl0gLSBsYXN0LmNvbmZpcm1lZFsxXQogIHNsb3BlIDwtIGR5CiAgdSA8LSBjKDEsIGR5KQogIGEgPC0gbGFzdC5jb25maXJtZWRbMV0gLSAoZGF5LmNvdW50IC0gMSkgKiBzbG9wZQogIGFibGluZShhID0gYSwgYiA9IHNsb3BlLCBjb2wgPSAidmlvbGV0IiwgbHcgPSAxLjUsIGx0eSA9IDQpCiAgbGFzdC5wcm9ncmVzc2lvbi5wY3QgPC0gcm91bmQoKDEwMCAqIGR5KSAvIGxhc3QuY29uZmlybWVkWzFdKQogIHRleHQoeCA9IGRheS5jb3VudCAtICgyNSArIHRyZW5kLmFuZ2xlIC8gMTApLCB5ID0gMC42NyAqIHlsaW1bMl0sIHBhc3RlKGR5LCAiY2FzZXMvZGF5XG5FeHRyYXBvbGF0aW9uOiIsIGR5ICogNywgImNhc2Uvdy5cbiIsIGxhc3QucHJvZ3Jlc3Npb24ucGN0LCAiJSBwcm9ncmVzcyBsYXN0IGRheSIpLCBzcnQgPSB0cmVuZC5hbmdsZSwgY29sID0gInZpb2xldCIpCiAgCiAgIyBUcmVuZCBiYXNlZCBvbiBsYXN0IDggb2JzZXJ2YXRpb25zICg3IGludGVydmFscywgb25lIHdlZWspCiAgbGFzdC5jb25maXJtZWQgPC0gdGFpbChjb3VudHJ5LmNvbmZpcm1lZCwgbiA9IDgpCiAgZHkgPC1sYXN0LmNvbmZpcm1lZFs4XSAtIGxhc3QuY29uZmlybWVkWzFdCiAgc2xvcGUgPC0gZHkgLyA3CiAgdSA8LSBjKDcsIGR5KQogIGEgPC0gbGFzdC5jb25maXJtZWRbMV0gLSAoZGF5LmNvdW50IC0gNykgKiBzbG9wZQogIGFibGluZShhID0gYSwgYiA9IHNsb3BlLCBjb2wgPSAiYmxhY2siLCBsdyA9IDEuNSwgbHR5ID0gNCkKICBsYXN0LnByb2dyZXNzaW9uLnBjdCA8LSByb3VuZCgoMTAwICogZHkpIC8gbGFzdC5jb25maXJtZWRbMV0pCiAgdGV4dCh4ID0gZGF5LmNvdW50ICsgNCAtICh0cmVuZC5hbmdsZSAvIDIwKSwgeSA9ICgwLjQgLSAodHJlbmQuYW5nbGUvMzAwMCkpICogeWxpbVsyXSwgcGFzdGUoZHksICJjYXNlcy93LlxuQXZnOiIsIGR5ICUvJSA3LCAiY2FzZS9kYXlcbiIsIGxhc3QucHJvZ3Jlc3Npb24ucGN0LCAiJSBwcm9ncmVzcyBsYXN0IHdlZWsiKSwgc3J0ID0gdHJlbmQuYW5nbGUsIGNvbCA9ICJibGFjayIpCgogICMgU2hvdyBzcGVjaWFsIG1lYXN1cmVzIGFnYWluc3QgcHJvcGFnYXRpb24uCiAgeXBvcyA9IG1heChjb3VudHJ5LmNvbmZpcm1lZCwgbmEucm0gPSBUUlVFKSAlLyUgMwogIGlmICghaXMubmEocHVibGljLnNwYWNlcy5jbG9zZWQuYXQpKSB7CiAgICBhYmxpbmUodiA9IHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0LCBjb2wgPSAiYmx1ZSIsIGx3ID0gMSwgbHR5ID0gNSkKICAgIHRleHQoeCA9IHB1YmxpYy5zcGFjZXMuY2xvc2VkLmF0IC0gNSwgeSA9IHlwb3MsICJBbGwgcHVibGljIHNwYWNlcyBhcmUgY2xvc2VkIiwgY29sID0gImJsdWUiLCBzcnQgPSA5MCkKICB9CiAgaWYgKCFpcy5uYShjb25maW5lbWVudC5hdCkpIHsKICAgIGFibGluZSh2ID0gY29uZmluZW1lbnQuYXQsIGNvbCA9ICJyZWQiLCBsdyA9IDEsIGx0eSA9IDUpCiAgICB0ZXh0KHggPSBjb25maW5lbWVudC5hdCAtIDUsIHkgPSB5cG9zLCAiUG9wdWxhdGlvbiBpcyBjb25maW5lZCIsIGNvbCA9ICJyZWQiLCBzcnQgPSA5MCkKICB9CiAgCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYygiQ29uZmlybWVkIiwgIkRlYXRocyIsICJSZWNvdmVyZWQiLCAiQ29uZmlybWVkIHRyZW5kIGJhc2VkIG9uIGxhc3QgZGF5IiwgIkNvbmZpcm1lZCB0cmVuZCBiYXNlZCBvbiBsYXN0IHdlZWsiKSwgY29sID0gYygicmVkIiwgImJsYWNrIiwgImdyZWVuIiwgInZpb2xldCIsICJibGFjayIpLCBsdHkgPSBjKHJlcCgxLCAzKSwgMiwgMyksIGx3ID0gYyhyZXAoMSwgMyksIDEuNSwgMS41KSkKICAKICBpZighaXMubmEoY291bnRyeS5wb3B1bGF0aW9uKSkgewogICAgcHJvcG9ydGlvbiA8LSBkaWZmKGNvdW50cnkuY29uZmlybWVkLyhjb3VudHJ5LnBvcHVsYXRpb24vMTAwMDAwKSkKICAgIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIHByb3BvcnRpb24sIHR5cGUgPSAiaCIsIGNvbCA9ICJjeWFuIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksIG1haW4gPSBwYXN0ZSgiTmV3IENvbmZpcm1lZCBDYXNlcyBwZXIgRGF5IHBlciAxMDBLIFBlcnNvbnMiLCBjb3VudHJ5Lm5hbWUsIHNlcCA9ICIgaW4gIiksIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IENhc2VzIHBlciBEYXkgcGVyIDEwMEsgUC4iLCBsd2QgPSA1KQogICAgZ3JpZCgpCiAgICBpbmNpZGVuY2UubGFzdC53ZWVrIDwtIHRhaWwoY291bnRyeS5jb25maXJtZWQsIG49OCkKICAgIGluY2lkZW5jZS5sYXN0LndlZWsgPC0gcm91bmQoKGluY2lkZW5jZS5sYXN0LndlZWtbOF0gLSBpbmNpZGVuY2UubGFzdC53ZWVrWzFdKSAvIChjb3VudHJ5LnBvcHVsYXRpb24vMTAwMDAwKSkKICAgIGluY2lkZW5jZS5sYXN0LnR3b3dlZWtzIDwtIHRhaWwoY291bnRyeS5jb25maXJtZWQsIG49MTUpCiAgICBpbmNpZGVuY2UubGFzdC50d293ZWVrcyA8LSByb3VuZCgoaW5jaWRlbmNlLmxhc3QudHdvd2Vla3NbMTVdIC0gaW5jaWRlbmNlLmxhc3QudHdvd2Vla3NbMV0pIC8gKGNvdW50cnkucG9wdWxhdGlvbi8xMDAwMDApKQogICAgaW5jaWRlbmNlLmxhc3QudGhyZWV3ZWVrcyA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuPTIyKQogICAgaW5jaWRlbmNlLmxhc3QudGhyZWV3ZWVrcyA8LSByb3VuZCgoaW5jaWRlbmNlLmxhc3QudGhyZWV3ZWVrc1syMl0gLSBpbmNpZGVuY2UubGFzdC50aHJlZXdlZWtzWzFdKSAvIChjb3VudHJ5LnBvcHVsYXRpb24vMTAwMDAwKSkKICAgIGluY2lkZW5jZS5sYXN0LmZvdXJ3ZWVrcyA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuPTI5KQogICAgaW5jaWRlbmNlLmxhc3QuZm91cndlZWtzIDwtIHJvdW5kKChpbmNpZGVuY2UubGFzdC5mb3Vyd2Vla3NbMjldIC0gaW5jaWRlbmNlLmxhc3QuZm91cndlZWtzWzFdKSAvIChjb3VudHJ5LnBvcHVsYXRpb24vMTAwMDAwKSkKICAgIGV2b2x1dGlvbi5vZi5pbmNpZGVuY2UgPC0gcGFzdGUoIkV2b2x1dGlvbiBvZiBuZXcgY29uZmlybWVkIGNhc2VzIHBlciAxMDAnMDAwIHBlcnNvbnMgb3ZlciB0aW1lOlxuXG5MYXN0IHdlZWs6IiwgaW5jaWRlbmNlLmxhc3Qud2VlaywgIlxuTGFzdCB0d28gd2Vla3M6IiwgaW5jaWRlbmNlLmxhc3QudHdvd2Vla3MsICJcbkxhc3QgdGhyZWUgd2Vla3M6IiwgaW5jaWRlbmNlLmxhc3QudGhyZWV3ZWVrcywgIlxuTGFzdCBmb3VyIHdlZWtzOiIsIGluY2lkZW5jZS5sYXN0LmZvdXJ3ZWVrcykKICAgIHRleHQoeCA9IGRheS5zdGFydCArIDAuNSAqIChkYXkuY291bnQgLSBkYXkuc3RhcnQpLCB5ID0gbWF4KHByb3BvcnRpb24pICogMC43LCBldm9sdXRpb24ub2YuaW5jaWRlbmNlKQogIH0KICBkaWZmcyA8LSBkaWZmKGNvdW50cnkuY29uZmlybWVkKQogIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIGRpZmZzLCB0eXBlID0gImgiLCBjb2wgPSAiY3lhbiIsIHhsaW0gPSAgYyhkYXkuc3RhcnQgKyAxLCBkYXkuY291bnQpLCBtYWluID0gcGFzdGUoIk5ldyBDb25maXJtZWQgQ2FzZXMgcGVyIERheSIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQ2FzZXMgcGVyIERheSIsIGx3ZCA9IDUpCiAgZ3JpZCgpCiAgbGFzdC5jb25maXJtZWQgPC0gdGFpbChjb3VudHJ5LmNvbmZpcm1lZCwgbiA9IDkpCiAgd2Vla2x5LnByb2dyZXNzLnJhdGlvIDwtIHJvdW5kKChsYXN0LmNvbmZpcm1lZFs5XSArIGxhc3QuY29uZmlybWVkWzhdKSAvIChsYXN0LmNvbmZpcm1lZFsyXSArIGxhc3QuY29uZmlybWVkWzFdKSwgZGlnaXRzID0gMikKICBsYXN0LmNvbmZpcm1lZCA8LSB0YWlsKGNvdW50cnkuY29uZmlybWVkLCBuID0gMTYpCiAgdHdvd2Vla3MucHJvZ3Jlc3MucmF0aW8gPC0gcm91bmQoKGxhc3QuY29uZmlybWVkWzE2XSArIGxhc3QuY29uZmlybWVkWzE1XSkgLyAobGFzdC5jb25maXJtZWRbMl0gKyBsYXN0LmNvbmZpcm1lZFsxXSksIGRpZ2l0cyA9IDIpCiAgbGFzdC5jb25maXJtZWQgPC0gdGFpbChjb3VudHJ5LmNvbmZpcm1lZCwgbiA9IDIzKQogIHRocmVld2Vla3MucHJvZ3Jlc3MucmF0aW8gPC0gcm91bmQoKGxhc3QuY29uZmlybWVkWzIzXSArIGxhc3QuY29uZmlybWVkWzIyXSkgLyAobGFzdC5jb25maXJtZWRbMl0gKyBsYXN0LmNvbmZpcm1lZFsxXSksIGRpZ2l0cyA9IDIpCiAgbGFzdC5jb25maXJtZWQgPC0gdGFpbChjb3VudHJ5LmNvbmZpcm1lZCwgbiA9IDMwKQogIG1vbnRobHkucHJvZ3Jlc3MucmF0aW8gPC0gcm91bmQoKGxhc3QuY29uZmlybWVkWzMwXSArIGxhc3QuY29uZmlybWVkWzI5XSkgLyAobGFzdC5jb25maXJtZWRbMl0gKyBsYXN0LmNvbmZpcm1lZFsxXSksIGRpZ2l0cyA9IDIpCiAgdGV4dCh4ID0gZGF5LnN0YXJ0ICsgMC41ICogKGRheS5jb3VudCAtIGRheS5zdGFydCksIHkgPSBtYXgoZGlmZnMpKjAuOCwgcGFzdGUoIlByb2dyZXNzaW9uIG9mIG5ldyBjb25maXJtZWQgY2FzZXMgcGVyIGRheTpcblxuTGFzdCB3ZWVrOiB4ICIsIHdlZWtseS5wcm9ncmVzcy5yYXRpbywgIiAoIiwgcm91bmQoKCh0d293ZWVrcy5wcm9ncmVzcy5yYXRpby93ZWVrbHkucHJvZ3Jlc3MucmF0aW8pLTEpKjEwMCwgMSksICAiJSBjb21wYXJlZCB0byBwcmV2LiB3ZWVrKVxuTGFzdCAyIHdlZWtzOiB4ICIsIHR3b3dlZWtzLnByb2dyZXNzLnJhdGlvLCAiICgiLCByb3VuZCgoKHRocmVld2Vla3MucHJvZ3Jlc3MucmF0aW8vdHdvd2Vla3MucHJvZ3Jlc3MucmF0aW8pLTEpKjEwMCwgMSksICAiJSBjb21wYXJlZCB0byBwcmV2LiB3ZWVrKVxuTGFzdCAzIHdlZWtzOiB4ICIsIHRocmVld2Vla3MucHJvZ3Jlc3MucmF0aW8sICIgKCIsIHJvdW5kKCgobW9udGhseS5wcm9ncmVzcy5yYXRpby90aHJlZXdlZWtzLnByb2dyZXNzLnJhdGlvLTEpKjEwMCksIDEpLCAgIiUgY29tcGFyZWQgdG8gcHJldi4gd2Vlaylcbkxhc3QgNCB3ZWVrczogeCAiLCBtb250aGx5LnByb2dyZXNzLnJhdGlvLCBzZXA9IiIpLCBjb2wgPSAiYmxhY2siKQogIAogIGlmKCFpcy5uYShjb3VudHJ5LnBvcHVsYXRpb24pKSB7CiAgICBwcm9wb3J0aW9uIDwtIGRpZmYoY291bnRyeS5kZWF0aHMvKGNvdW50cnkucG9wdWxhdGlvbi8xMDAwMDAwKSkKICAgIHBsb3Qoc2VxKDIsIGRheS5jb3VudCksIHByb3BvcnRpb24sIHR5cGUgPSAiaCIsIGNvbCA9ICJibGFjayIsIHhsaW0gPSAgYyhkYXkuc3RhcnQgKyAxLCBkYXkuY291bnQpLCBtYWluID0gcGFzdGUoIk5ldyBEZWF0aHMgcGVyIERheSBwZXIgMSBNaWxsaW9uIFBlcnNvbnMiLCBjb3VudHJ5Lm5hbWUsIHNlcCA9ICIgaW4gIiksIHhsYWIgPSAiRGF5cyBTaW5jZSBKYW51YXJ5IDIxLCAyMDIwIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IERlYXRocyBwZXIgRGF5IHBlciAxTSBQLiIsIGx3ZCA9IDUpCiAgICBncmlkKCkKICB9CiAgZGlmZnMgPC0gZGlmZihjb3VudHJ5LmRlYXRocykKICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gImJsYWNrIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksIG1haW4gPSBwYXN0ZSgiTmV3IERlYXRocyBwZXIgRGF5IiwgY291bnRyeS5uYW1lLCBzZXAgPSAiIGluICIpLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBEZWF0aHMgcGVyIERheSIsIGx3ZCA9IDUpCiAgZ3JpZCgpCiAgCiAgaWYgKCFpcy5uYShjb3VudHJ5LnJlY292ZXJlZCkpIHsKICAgIGRpZmZzIDwtIGRpZmYoY291bnRyeS5yZWNvdmVyZWQpCiAgICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gImdyZWVuIiwgeGxpbSA9ICBjKGRheS5zdGFydCArIDEsIGRheS5jb3VudCksICBtYWluID0gcGFzdGUoIk5ldyBSZWNvdmVyZWQgQ2FzZXMgcGVyIERheSBpbiIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkiLCBsd2QgPSA1KQogICAgZ3JpZCgpCiAgICAKICAgIGRpZmZzIDwtIGRpZmYoY291bnRyeS5jb25maXJtZWQgLSAoY291bnRyeS5kZWF0aHMgKyBjb3VudHJ5LnJlY292ZXJlZCkpCiAgICBwbG90KHNlcSgyLCBkYXkuY291bnQpLCBkaWZmcywgdHlwZSA9ICJoIiwgY29sID0gInJlZCIsIHhsaW0gPSAgYyhkYXkuc3RhcnQgKyAxLCBkYXkuY291bnQpLCBtYWluID0gcGFzdGUoIk5ldyBBY3RpdmUgQ2FzZXMgcGVyIERheSIsIGNvdW50cnkubmFtZSwgc2VwID0gIiBpbiAiKSwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgQWN0aXZlIENhc2VzIHBlciBEYXkiLCBsd2Q9NSkKICAgIGdyaWQoKQogIH0KfQoKY292aWQgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfY29uZmlybWVkX2dsb2JhbC5jc3YiKQpjb3ZpZC5kZWF0aHMgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfZGVhdGhzX2dsb2JhbC5jc3YiKQpjb3ZpZC5yZWNvdmVyZWQgPC0gcmVhZC5jc3YoImNzc2VfY292aWRfMTlfZGF0YS9jc3NlX2NvdmlkXzE5X3RpbWVfc2VyaWVzL3RpbWVfc2VyaWVzX2NvdmlkMTlfcmVjb3ZlcmVkX2dsb2JhbC5jc3YiKQoKY291bnRyeS5uYW1lcyA8LSBjKCJTd2l0emVybGFuZCIsICJJdGFseSIsICJGcmFuY2UiLCAiR2VybWFueSIsICJBdXN0cmlhIiAsICJTcGFpbiIsICJHcmVhdCBCcml0YWluIiwgIkRlbm1hcmsiLCAiTm9yd2F5IiwgIlN3ZWRlbiIsICJJY2VsYW5kIiwgIkJlbGdpdW0iKQpjb3VudHJ5LmNvdW50IDwtIGxlbmd0aChjb3VudHJ5Lm5hbWVzKQpjb2wgPC0gcmFpbmJvdyhjb3VudHJ5LmNvdW50KQpsdHkgPC0gc2VxKDEsIGNvdW50cnkuY291bnQpCnBjaCA8LSBzZXEoMTAsIDEwICsgY291bnRyeS5jb3VudCkKCnN3aXR6ZXJsYW5kLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dpdHplcmxhbmQiKSkKc3dpdHplcmxhbmQuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dpdHplcmxhbmQiKSkKc3dpdHplcmxhbmQucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dpdHplcmxhbmQiKSkKc3dpdHplcmxhbmQucG9wdWxhdGlvbiA8LSA4NTcwMDAwCgppdGFseS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkl0YWx5IikpCml0YWx5LmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkl0YWx5IikpCml0YWx5LnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkl0YWx5IikpCml0YWx5LnBvcHVsYXRpb24gPC0gNjAzNjAwMDAKCmZyYW5jZS5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkZyYW5jZSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCmZyYW5jZS5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJGcmFuY2UiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpmcmFuY2UucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiRnJhbmNlIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKZnJhbmNlLnBvcHVsYXRpb24gPC0gNjY5OTAwMDAKCmdlcm1hbnkuY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJHZXJtYW55IikpCmdlcm1hbnkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiR2VybWFueSIpKQpnZXJtYW55LnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkdlcm1hbnkiKSkKZ2VybWFueS5wb3B1bGF0aW9uIDwtIDgzMDIwMDAwCgphdXN0cmlhLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQXVzdHJpYSIpKQphdXN0cmlhLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkF1c3RyaWEiKSkKYXVzdHJpYS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJBdXN0cmlhIikpCmF1c3RyaWEucG9wdWxhdGlvbiA8LSA4ODU5MDAwCgpzcGFpbi5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIlNwYWluIikpCnNwYWluLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlNwYWluIikpCnNwYWluLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIlNwYWluIikpCnNwYWluLnBvcHVsYXRpb24gPC0gNDY5NDAwMDAKCnVrLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiVW5pdGVkIEtpbmdkb20iICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQp1ay5kZWF0aHMgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5kZWF0aHMsIENvdW50cnkuUmVnaW9uID09ICJVbml0ZWQgS2luZ2RvbSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiIikpCnVrLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIlVuaXRlZCBLaW5nZG9tIiAmIFByb3ZpbmNlLlN0YXRlID09ICIiKSkKdWsucG9wdWxhdGlvbiA8LSA2NjY1MDAwMAoKZGVubWFyay5jb25maXJtZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZCwgQ291bnRyeS5SZWdpb24gPT0gIkRlbm1hcmsiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpkZW5tYXJrLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkRlbm1hcmsiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpkZW5tYXJrLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkRlbm1hcmsiICYgUHJvdmluY2UuU3RhdGUgPT0gIiIpKQpkZW5tYXJrLnBvcHVsYXRpb24gPC0gNTgwNjAwMAoKbm9yd2F5LmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQpub3J3YXkuZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQpub3J3YXkucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQpub3J3YXkucG9wdWxhdGlvbiA8LSA1NDMzMDAwCgpzd2VkZW4uY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJTd2VkZW4iKSkKc3dlZGVuLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIlN3ZWRlbiIpKQpzd2VkZW4ucmVjb3ZlcmVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQucmVjb3ZlcmVkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiU3dlZGVuIikpCnN3ZWRlbi5wb3B1bGF0aW9uIDwtIDEwMjMwMDAwCgppY2VsYW5kLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiSWNlbGFuZCIpKQppY2VsYW5kLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkljZWxhbmQiKSkKaWNlbGFuZC5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJJY2VsYW5kIikpCmljZWxhbmQucG9wdWxhdGlvbiA8LSAzNjQxMzQKCmJlbGdpdW0uY29uZmlybWVkIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQsIENvdW50cnkuUmVnaW9uID09ICJCZWxnaXVtIikpCmJlbGdpdW0uZGVhdGhzIDwtIGdldF90aW1lc2VyaWVzX2FzX3ZlY3RvcihzdWJzZXQoY292aWQuZGVhdGhzLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQmVsZ2l1bSIpKQpiZWxnaXVtLnJlY292ZXJlZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLnJlY292ZXJlZCwgQ291bnRyeS5SZWdpb24gPT0gIkJlbGdpdW0iKSkKYmVsZ2l1bS5wb3B1bGF0aW9uIDwtIDExNDkyNjQxCgpjb3VudHJpZXMuY29uZmlybWVkIDwtIGxpc3Qoc3dpdHplcmxhbmQuY29uZmlybWVkLCBpdGFseS5jb25maXJtZWQsIGZyYW5jZS5jb25maXJtZWQsIGdlcm1hbnkuY29uZmlybWVkLCBhdXN0cmlhLmNvbmZpcm1lZCwgc3BhaW4uY29uZmlybWVkLCB1ay5jb25maXJtZWQsIGRlbm1hcmsuY29uZmlybWVkLCBub3J3YXkuY29uZmlybWVkLCBzd2VkZW4uY29uZmlybWVkLCBpY2VsYW5kLmNvbmZpcm1lZCwgYmVsZ2l1bS5jb25maXJtZWQpCmNvdW50cmllcy5kZWF0aHMgPC0gbGlzdChzd2l0emVybGFuZC5kZWF0aHMsIGl0YWx5LmRlYXRocywgZnJhbmNlLmRlYXRocywgZ2VybWFueS5kZWF0aHMsIGF1c3RyaWEuZGVhdGhzLCBzcGFpbi5kZWF0aHMsIHVrLmRlYXRocywgZGVubWFyay5kZWF0aHMsIG5vcndheS5kZWF0aHMsIHN3ZWRlbi5kZWF0aHMsIGljZWxhbmQuZGVhdGhzLCBiZWxnaXVtLmRlYXRocykKY291bnRyaWVzLnJlY292ZXJlZCA8LSBsaXN0KHN3aXR6ZXJsYW5kLnJlY292ZXJlZCwgaXRhbHkucmVjb3ZlcmVkLCBmcmFuY2UucmVjb3ZlcmVkLCBnZXJtYW55LnJlY292ZXJlZCwgYXVzdHJpYS5yZWNvdmVyZWQsIHNwYWluLnJlY292ZXJlZCwgdWsucmVjb3ZlcmVkLCBkZW5tYXJrLnJlY292ZXJlZCwgbm9yd2F5LnJlY292ZXJlZCwgc3dlZGVuLmNvbmZpcm1lZCwgaWNlbGFuZC5yZWNvdmVyZWQsIGJlbGdpdW0ucmVjb3ZlcmVkKQpjb3VudHJpZXMucG9wdWxhdGlvbiA8LSBsaXN0KHN3aXR6ZXJsYW5kLnBvcHVsYXRpb24sIGl0YWx5LnBvcHVsYXRpb24sIGZyYW5jZS5wb3B1bGF0aW9uLCBnZXJtYW55LnBvcHVsYXRpb24sIGF1c3RyaWEucG9wdWxhdGlvbiwgc3BhaW4ucG9wdWxhdGlvbiwgdWsucG9wdWxhdGlvbiwgZGVubWFyay5wb3B1bGF0aW9uLCBub3J3YXkucG9wdWxhdGlvbiwgc3dlZGVuLmNvbmZpcm1lZCwgaWNlbGFuZC5wb3B1bGF0aW9uLCBiZWxnaXVtLnBvcHVsYXRpb24pCgpkYXkuY291bnQgPC0gTlJPVyhzd2l0emVybGFuZC5jb25maXJtZWQpCmBgYAoKIyBFdm9sdXRpb24gaW4gU3dpdHplcmxhbmQgYW5kIFdlc3Rlcm4gRXVyb3BlCgpUaGUgZmlndXJlcyBkbyBub3QgcmVwcmVzZW50IHRoZSBzYW1lIHRoaW5nIGluIGVhY2ggY291bnRyeSwgZGVwZW5kaW5nIG9uIHRoZSBleHRlbnQgb2YgdGhlIHNjcmVlbmluZyB0ZXN0cyBjYXJyaWVkIG91dC4gUmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0sIHRoZSB3ZWVrbHkgYW5kIGRhaWx5IHRyZW5kIGN1cnZlcyBhbGxvdyB5b3UgdG8gZ2V0IGFuIGlkZWEgb2YgdGhlIGZvcmVzZWVhYmxlIGV2b2x1dGlvbiBmb3IgdGhlIG5leHQgZGF5cyAoYXNzdW1pbmcgdGhhdCB0aGUgc2NyZWVuaW5nIHN0cmF0ZWd5IGRvZXMgbm90IGNoYW5nZSBvdmVyIHRpbWUpLiBSZXNwZWN0aXZlbHksIGl0IHByb3ZpZGVzIGFuIGluZGljYXRpb24gb2YgYSBwb3NzaWJsZSBpbmZsZWN0aW9uIG9mIHRoZSBwcm9ncmVzc2lvbiBvZiB0aGUgZXBpZGVtaWMgaW4gdGhlIG5lYXIgZnV0dXJlLgoKSU1QT1JUQU5UIE5PVEU6IFRoZSBncmFwaGljcyBiZWxvdyBzaG93IHZhbHVlcyBwcm92aWRlZCBieSBvZmZpY2lhbCBzb3VyY2VzIGJldHdlZW4gMCBhbmQgNDhoIGJlZm9yZSB0aGUgbGFzdCB1cGRhdGUgb2YgdGhpcyBkb2N1bWVudC4gQXMgYW4gZXhlbXBsZSwgZm9yIFN3aXR6ZXJsYW5kLCB5b3UnbGwgc2VlIHRoZSB2YWx1ZXMgdXAgdG8gT2N0b2JlciAyMiBhdCAxMkFNLCBldmVuIHRob3VnaCB0aGUgZ2FwaGljcyB3ZXJlIHVwZGF0ZSBvbiBPY3RvYmVyIDI0IGF0IDFBTSEgVGhpcyBpcyBkdWUgdG8gdGhlIGxhZyBiZXR3ZWVuIHRoZSB0aW1lIHNsb3QgZm9yIGNvbW11bmljYXRpbmcgb2ZmaWNpYWwgZmlndXJlcyBhbmQgdGhlIHRpbWUgc2xvdCB1c2VkIGJ5IEpvaG5zIEhvcGtpbnMgQ1NTRSBmb3IgcmVsZWFzaW5nIGluIHRoZWlyIEdpdCByZXBvc2l0b3J5IHRoZSBhZ2dyZWdhdGVkIGZpZ3VyZXMgZm9yIGFsbCBvZmZpY2lhbCBzb3VyY2VzLgoKIyMgU3dpdHplcmxhbmQKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoc3dpdHplcmxhbmQuY29uZmlybWVkLCBzd2l0emVybGFuZC5kZWF0aHMsIHN3aXR6ZXJsYW5kLnJlY292ZXJlZCwgc3dpdHplcmxhbmQucG9wdWxhdGlvbiwgIlN3aXR6ZXJsYW5kIiwgNTUsIE5BLCB0cmVuZC5hbmdsZSA9IDc1KQpgYGAKCiMjIEl0YWx5CmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGl0YWx5LmNvbmZpcm1lZCwgaXRhbHkuZGVhdGhzLCBpdGFseS5yZWNvdmVyZWQsIGl0YWx5LnBvcHVsYXRpb24sICJJdGFseSIsIE5BLCB0cmVuZC5hbmdsZSA9IDcwKQpgYGAKCiMjIEZyYW5jZQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShmcmFuY2UuY29uZmlybWVkLCBnZXJtYW55LmRlYXRocywgZnJhbmNlLnJlY292ZXJlZCwgZnJhbmNlLnBvcHVsYXRpb24sICJGcmFuY2UiLCA1MywgNTYsIHRyZW5kLmFuZ2xlID0gNzApCmBgYAoKIyMgR2VybWFueQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShnZXJtYW55LmNvbmZpcm1lZCwgc3dpdHplcmxhbmQuZGVhdGhzLCBnZXJtYW55LnJlY292ZXJlZCwgZ2VybWFueS5wb3B1bGF0aW9uLCAiR2VybWFueSIsIDQ4LCBOQSwgdHJlbmQuYW5nbGUgPSA2NSkKYGBgCgojIyBBdXN0cmlhCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90X3RpbWVfc2VyaWVzX2Zvcl9jb3VudHJ5KGF1c3RyaWEuY29uZmlybWVkLCBhdXN0cmlhLmRlYXRocywgYXVzdHJpYS5yZWNvdmVyZWQsIGF1c3RyaWEucG9wdWxhdGlvbiwgIkF1c3RyaWEiLCA1MiwgTkEsIHRyZW5kLmFuZ2xlID0gNzApCmBgYAoKIyMgU3BhaW4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoc3BhaW4uY29uZmlybWVkLCBzcGFpbi5kZWF0aHMsIHNwYWluLnJlY292ZXJlZCwgc3BhaW4ucG9wdWxhdGlvbiwgIlNwYWluIiwgTkEsIDUzLCB0cmVuZC5hbmdsZSA9IDY1KQpgYGAKCiMjIEdyZWF0IEJyaXRhaW4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkodWsuY29uZmlybWVkLCB1ay5kZWF0aHMsIHVrLnJlY292ZXJlZCwgdWsucG9wdWxhdGlvbiwgIkdyZWF0IEJyaXRhaW4iLCBOQSwgTkEsIHRyZW5kLmFuZ2xlID0gNjUpCmBgYAoKIyMgRGVubWFyawpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShkZW5tYXJrLmNvbmZpcm1lZCwgZGVubWFyay5kZWF0aHMsIGRlbm1hcmsucmVjb3ZlcmVkLCBkZW5tYXJrLnBvcHVsYXRpb24sICJEZW5tYXJrIiwgTkEsIE5BLCB0cmVuZC5hbmdsZSA9IDY1KQpgYGAKCiMjIE5vcndheQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShub3J3YXkuY29uZmlybWVkLCBub3J3YXkuZGVhdGhzLCBub3J3YXkucmVjb3ZlcmVkLCBub3J3YXkucG9wdWxhdGlvbiwgIk5vcndheSIsIE5BLCBOQSwgdHJlbmQuYW5nbGUgPSA2NSkKYGBgCgojIyBTd2VkZW4KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoc3dlZGVuLmNvbmZpcm1lZCwgc3dlZGVuLmRlYXRocywgc3dlZGVuLnJlY292ZXJlZCwgc3dlZGVuLnBvcHVsYXRpb24sICJTd2VkZW4iLCBOQSwgTkEsIHRyZW5kLmFuZ2xlID0gNjApCmBgYAoKIyMgSWNlbGFuZApgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeShpY2VsYW5kLmNvbmZpcm1lZCwgaWNlbGFuZC5kZWF0aHMsIGljZWxhbmQucmVjb3ZlcmVkLCBpY2VsYW5kLnBvcHVsYXRpb24sICJJY2VsYW5kIiwgTkEsIE5BLCB0cmVuZC5hbmdsZSA9IDcwKQpgYGAKCiMjIEJlbGdpdW0KYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoYmVsZ2l1bS5jb25maXJtZWQsIGJlbGdpdW0uZGVhdGhzLCBiZWxnaXVtLnJlY292ZXJlZCwgYmVsZ2l1bS5wb3B1bGF0aW9uLCAiQmVsZ2l1bSIsIDU1LCBOQSwgdHJlbmQuYW5nbGUgPSA3NSkKYGBgCgojIFdoYXQgSGFwcGVuZWQgaW4gSHViZWkgUHJvdmluY2UgKENoaW5hKQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cmh1YmVpLmNvbmZpcm1lZCA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLCBDb3VudHJ5LlJlZ2lvbiA9PSAiQ2hpbmEiICYgUHJvdmluY2UuU3RhdGUgPT0gIkh1YmVpIikpCmh1YmVpLmRlYXRocyA8LSBnZXRfdGltZXNlcmllc19hc192ZWN0b3Ioc3Vic2V0KGNvdmlkLmRlYXRocywgQ291bnRyeS5SZWdpb24gPT0gIkNoaW5hIiAmIFByb3ZpbmNlLlN0YXRlID09ICJIdWJlaSIpKQpodWJlaS5yZWNvdmVyZWQgPC0gZ2V0X3RpbWVzZXJpZXNfYXNfdmVjdG9yKHN1YnNldChjb3ZpZC5yZWNvdmVyZWQsIENvdW50cnkuUmVnaW9uID09ICJDaGluYSIgJiBQcm92aW5jZS5TdGF0ZSA9PSAiSHViZWkiKSkKCnBsb3RfdGltZV9zZXJpZXNfZm9yX2NvdW50cnkoaHViZWkuY29uZmlybWVkLCBodWJlaS5kZWF0aHMsIGh1YmVpLnJlY292ZXJlZCwgTkEsICJIdWJlaSBQcm92aW5jZSwgQ2hpbmEiLCBOQSwgMiwgdHJlbmQuYW5nbGUgPSAwKQpgYGAKCiMgV2hhdCBJcyBIYXBwZW5pbmcgaW4gVVNBCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2V0X3N1bV9vZl90aW1lc2VyaWVzX2FzX3ZlY3Rvcl9mb3JfdXNhIDwtIGZ1bmN0aW9uKGRmLCBleGx1ZGUpIHsKICB0bXAgPC0gY29sU3VtcyhzdWJzZXQoZGYsIHNlbGVjdCA9IC1leGx1ZGUpKQogIHRtcCA8LSBzYXBwbHkoYXMudmVjdG9yKHRyYW5zcG9zZShhcy5saXN0KHRtcCkpKSwgYXMuaW50ZWdlcikKICByZXR1cm4odG1wKQp9Cgpjb3ZpZC51cyA8LSByZWFkLmNzdigiY3NzZV9jb3ZpZF8xOV9kYXRhL2Nzc2VfY292aWRfMTlfdGltZV9zZXJpZXMvdGltZV9zZXJpZXNfY292aWQxOV9jb25maXJtZWRfVVMuY3N2IikKY292aWQudXMuZGVhdGhzIDwtIHJlYWQuY3N2KCJjc3NlX2NvdmlkXzE5X2RhdGEvY3NzZV9jb3ZpZF8xOV90aW1lX3Nlcmllcy90aW1lX3Nlcmllc19jb3ZpZDE5X2RlYXRoc19VUy5jc3YiKQoKdXNhLmNvbmZpcm1lZCA8LSBzdWJzZXQoY292aWQudXMsIGlzbzMgPT0gIlVTQSIpCnVzYS5kZWF0aHMgPC0gc3Vic2V0KGNvdmlkLnVzLmRlYXRocywgaXNvMyA9PSAiVVNBIikKCnVzYS5jb25maXJtZWQgPC0gZ2V0X3N1bV9vZl90aW1lc2VyaWVzX2FzX3ZlY3Rvcl9mb3JfdXNhKHVzYS5jb25maXJtZWQsIGMoMToxMSkpCnVzYS5kZWF0aHMgPC0gZ2V0X3N1bV9vZl90aW1lc2VyaWVzX2FzX3ZlY3Rvcl9mb3JfdXNhKHVzYS5kZWF0aHMsIGMoMToxMikpCgp1c2EucG9wdWxhdGlvbiA8LSAzMzAwNTI5NjAKcGxvdF90aW1lX3Nlcmllc19mb3JfY291bnRyeSh1c2EuY29uZmlybWVkLCB1c2EuZGVhdGhzLCBOQSwgdXNhLnBvcHVsYXRpb24sICJVU0EiLCBOQSwgTkEsIHRyZW5kLmFuZ2xlPTI1KQpgYGAKCiMgQ29tcGFyaXNvbiBvZiBOdW1iZXIgb2YgQ29uZmlybWVkIENhc2VzIGluIFdlc3Rlcm4gRXVyb3BlCgpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KeHJhbmdlIDwtIGMoMzUsIGRheS5jb3VudCkKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSksIG5hLnJtID0gVFJVRSkKfQp5cmFuZ2UgPC0gYygwLCBtYXgueSkKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIkNvbmZpcm1lZCBDYXNlcyIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgQ2FzZXMiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDEsIGRheS5jb3VudCksIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSwgdHlwZSA9ICJiIiwgY29sID0gY29sW2ldLCBsdHkgPSBsdHlbaV0sIHBjaCA9IHBjaFtpXSwgbHcgPSAxKQp9CmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IGx0eSwgcGNoID0gcGNoLCB0aXRsZSA9ICJDb3VudHJ5IikKCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIG1heC55IDwtIG1heChjKG1heC55LCBkaWZmKHRhaWwoY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dKSkpLCBuYS5ybSA9IFRSVUUpCn0KeHJhbmdlIDwtIGMoZGF5LmNvdW50LTEwLCBkYXkuY291bnQrMC4yKQp5cmFuZ2UgPC0gYygwLCBtYXgueSAqIDEuMykKcGxvdCh4cmFuZ2UsIHlyYW5nZSwgbWFpbj0gIk5ldyBDb25maXJtZWQgQ2FzZXMgcGVyIERheSAobGFzdCAxMCBkYXlzKSIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IENhc2VzIHBlciBEYXkiKQoKZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMSwgbHcgPSA0LCB0aXRsZSA9ICJDb3VudHJ5IiwgbmNvbCA9IDQsIGNleCA9IDAuOSkKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGxpbmVzKHNlcSgyLCBkYXkuY291bnQpIC0gMC40NSArIDAuMDc1ICogaSwgZGlmZihjb3VudHJpZXMuY29uZmlybWVkW1tpXV0pLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gMykKfQoKcGxvdCh4cmFuZ2UsIHlyYW5nZS82MDAsIG1haW49ICJOZXcgQ29uZmlybWVkIENhc2VzIHBlciBEYXkgcGVyIDEwMEsgUGVyc29ucyAobGFzdCAxMCBkYXlzKSIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IENhc2VzIHBlciBEYXkgcGVyIDEwMEsgUC4iKQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wNzUgKiBpLCBkaWZmKGNvdW50cmllcy5jb25maXJtZWRbW2ldXSkvKGNvdW50cmllcy5wb3B1bGF0aW9uW1tpXV1bMV0vMTAwMDAwKSwgdHlwZSA9ICJoIiwgY29sID0gY29sW2ldLCBsdHkgPSAxLCBsdyA9IDMpCn0KYGBgCgojIENvbXBhcmlzb24gb2YgTnVtYmVyIG9mIERlYXRocyBpbiBXZXN0ZXJuIEV1cm9wZQoKYGBge3IsIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnhyYW5nZSA8LSBjKDQwLCBkYXkuY291bnQpCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIG1heC55IDwtIG1heChjKG1heC55LCBjb3VudHJpZXMuZGVhdGhzW1tpXV0pLCBuYS5ybSA9IFRSVUUpCn0KeXJhbmdlIDwtIGMoMCwgbWF4LnkpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJEZWF0aHMiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIERlYXRocyIpCmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IGx0eSwgcGNoID0gcGNoLCB0aXRsZSA9ICJDb3VudHJ5IikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGxpbmVzKHNlcSgxLCBkYXkuY291bnQpLCBjb3VudHJpZXMuZGVhdGhzW1tpXV0sIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQoKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYodGFpbChjb3VudHJpZXMuZGVhdGhzW1tpXV0pKSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCswLjIpCnlyYW5nZSA8LSBjKDAsIG1heC55ICogMS4zKQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiTmV3IERlYXRocyBwZXIgRGF5IChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgRGVhdGhzIHBlciBEYXkiKQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wNzUgKiBpLCBkaWZmKGNvdW50cmllcy5kZWF0aHNbW2ldXSksIHR5cGUgPSAiaCIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gMSwgbHcgPSAzKQp9CgpwbG90KHhyYW5nZSwgeXJhbmdlLzIsIG1haW49ICJOZXcgRGVhdGhzIHBlciBEYXkgcGVyIDEwMEsgUGVyc29ucyAobGFzdCAxMCBkYXlzKSIsIHR5cGUgPSAibiIsIHhsYWIgPSAiRGF5cyBTaW5jZSAyMDIwLTAxLTIxIiwgeWxhYiA9ICJOdW1iZXIgb2YgTmV3IERlYXRocyBwZXIgRGF5IHBlciAxMDBLIFAuIikKZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gMSwgbHcgPSA0LCB0aXRsZSA9ICJDb3VudHJ5IiwgbmNvbCA9IDQsIGNleCA9IDAuOSkKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGxpbmVzKHNlcSgyLCBkYXkuY291bnQpIC0gMC40NSArIDAuMDc1ICogaSwgZGlmZihjb3VudHJpZXMuY29uZmlybWVkW1tpXV0pLyhjb3VudHJpZXMucG9wdWxhdGlvbltbaV1dWzFdLzEwMDAwMCksIHR5cGUgPSAiaCIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gMSwgbHcgPSAzKQp9CmBgYAoKIyBDb21wYXJpc29uIG9mIE51bWJlciBvZiBSZWNvdmVyZWQgQ2FzZXMgaW4gV2VzdGVybiBFdXJvcGUKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp4cmFuZ2UgPC0gYyg0MCwgZGF5LmNvdW50KQptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICBtYXgueSA8LSBtYXgoYyhtYXgueSwgY291bnRyaWVzLnJlY292ZXJlZFtbaV1dKSwgbmEucm0gPSBUUlVFKQp9CnhyYW5nZSA8LSBjKDUwLCBkYXkuY291bnQpCnlyYW5nZSA8LSBjKDAsIG1heC55KQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiUmVjb3ZlcmVkIENhc2VzIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIEphbnVhcnkgMjEsIDIwMjAiLCB5bGFiID0gIk51bWJlciBvZiBDYXNlcyIpCmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IGx0eSwgcGNoID0gcGNoLCB0aXRsZSA9ICJDb3VudHJ5IikKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIGQgPC0gbnJvdyhjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pCiAgbGluZXMoc2VxKDEsIGQpLCBjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0sIHR5cGUgPSAiYiIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gbHR5W2ldLCBwY2ggPSBwY2hbaV0sIGx3ID0gMSkKfQoKbWF4LnkgPC0gMApmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYodGFpbChjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0pKSksIG5hLnJtID0gVFJVRSkKfQp4cmFuZ2UgPC0gYyhkYXkuY291bnQtMTAsIGRheS5jb3VudCswLjIpCnlyYW5nZSA8LSBjKDAsIG1heC55ICogMS4zKQpwbG90KHhyYW5nZSwgeXJhbmdlLCBtYWluPSAiTmV3IFJlY292ZXJlZCBDYXNlcyBwZXIgRGF5IChsYXN0IDEwIGRheXMpIiwgdHlwZSA9ICJuIiwgeGxhYiA9ICJEYXlzIFNpbmNlIDIwMjAtMDEtMjEiLCB5bGFiID0gIk51bWJlciBvZiBOZXcgUmVjb3ZlcmVkIENhc2VzIHBlciBEYXkiKQpncmlkKCkKbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gY291bnRyeS5uYW1lcywgY29sID0gY29sLCBsdHkgPSAxLCBsdyA9IDQsIHRpdGxlID0gIkNvdW50cnkiLCBuY29sID0gNCwgY2V4ID0gMC45KQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wNzUgKiBpLCBkaWZmKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSksIHR5cGUgPSAiaCIsIGNvbCA9IGNvbFtpXSwgbHR5ID0gMSwgbHcgPSAzKQp9CmBgYAoKIyBDb21wYXJpc29uIG9mIE51bWJlciBvZiBBY3RpdmUgQ2FzZXMgaW4gV2VzdGVybiBFdXJvcGUKCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp4cmFuZ2UgPC0gYyg0MCwgZGF5LmNvdW50KQptYXgueSA8LSAwCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICB5IDwtIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSAtIChjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0gKyBjb3VudHJpZXMuZGVhdGhzW1tpXV0pCiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIHkpLCBuYS5ybSA9IFRSVUUpCn0KeXJhbmdlIDwtIGMoMCwgbWF4LnkpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJBY3RpdmUgQ2FzZXMiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgSmFudWFyeSAyMSwgMjAyMCIsIHlsYWIgPSAiTnVtYmVyIG9mIENhc2VzIikKZ3JpZCgpCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGNvdW50cnkubmFtZXMsIGNvbCA9IGNvbCwgbHR5ID0gbHR5LCBwY2ggPSBwY2gsIHRpdGxlID0gIkNvdW50cnkiKQpmb3IgKGkgaW4gc2VxKDEsIGNvdW50cnkuY291bnQpKSB7CiAgeSA8LSBjb3VudHJpZXMuY29uZmlybWVkW1tpXV0gLSAoY291bnRyaWVzLnJlY292ZXJlZFtbaV1dICsgY291bnRyaWVzLmRlYXRoc1tbaV1dKQogIGxpbmVzKHNlcSgxLCBkKSwgeSwgdHlwZSA9ICJiIiwgY29sID0gY29sW2ldLCBsdHkgPSBsdHlbaV0sIHBjaCA9IHBjaFtpXSwgbHcgPSAxKQp9CgptaW4ueSA8LSAwCm1heC55IDwtIDAKZm9yIChpIGluIHNlcSgxLCBjb3VudHJ5LmNvdW50KSkgewogIHkgPC0gY291bnRyaWVzLmNvbmZpcm1lZFtbaV1dIC0gKGNvdW50cmllcy5yZWNvdmVyZWRbW2ldXSArIGNvdW50cmllcy5kZWF0aHNbW2ldXSkKICB5IDwtIHRhaWwoeSwgMTApCiAgbWF4LnkgPC0gbWF4KGMobWF4LnksIGRpZmYoeSkpLCBuYS5ybSA9IFRSVUUpCiAgbWluLnkgPC0gbWluKGMobWluLnksIGRpZmYoeSkpLCBuYS5ybSA9IFRSVUUpCn0KeHJhbmdlIDwtIGMoZGF5LmNvdW50LTEwLCBkYXkuY291bnQrMC4yKQp5cmFuZ2UgPC0gYyhtaW4ueSwgbWF4LnkgKiAxLjMpCnBsb3QoeHJhbmdlLCB5cmFuZ2UsIG1haW49ICJOZXcgQWN0aXZlIENhc2VzIHBlciBEYXkgKGxhc3QgMTAgZGF5cykiLCB0eXBlID0gIm4iLCB4bGFiID0gIkRheXMgU2luY2UgMjAyMC0wMS0yMSIsIHlsYWIgPSAiTnVtYmVyIG9mIE5ldyBBY3RpdmUgQ2FzZXMgcGVyIERheSIpCmdyaWQoKQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjb3VudHJ5Lm5hbWVzLCBjb2wgPSBjb2wsIGx0eSA9IDEsIGx3ID0gNCwgdGl0bGUgPSAiQ291bnRyeSIsIG5jb2wgPSA0LCBjZXggPSAwLjkpCmZvciAoaSBpbiBzZXEoMSwgY291bnRyeS5jb3VudCkpIHsKICB5IDwtIGNvdW50cmllcy5jb25maXJtZWRbW2ldXSAtIChjb3VudHJpZXMucmVjb3ZlcmVkW1tpXV0gKyBjb3VudHJpZXMuZGVhdGhzW1tpXV0pCiAgbGluZXMoc2VxKDIsIGRheS5jb3VudCkgLSAwLjQ1ICsgMC4wNzUgKiBpLCBkaWZmKHkpLCB0eXBlID0gImgiLCBjb2wgPSBjb2xbaV0sIGx0eSA9IDEsIGx3ID0gMykKfQpgYGAKCiMgQWJvdXQKCkFsbCB0aGUgZ3JhcGhzIGFib3ZlIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBieSBKb2hucyBIb3BraW5zIENTU0UgKHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgc3RyaWN0bHkgZm9yIGVkdWNhdGlvbmFsIGFuZCBhY2FkZW1pYyByZXNlYXJjaCBwdXJwb3NlcykuCgpUaGUgc291cmNlIGNvZGUgZm9yIGdlbmVyYXRpbmcgdGhlIGdyYXBocyBpcyBhdmFpbGFibGUgdW5kZXIgTUlUIExpY2Vuc2UgYXQgaHR0cHM6Ly9naXRodWIuY29tL3BoaWxpcHBlLWRvY291cnQvQ09WSUQtMTkvYmxvYi9tYXN0ZXIvY292aWRfMTlfd2VzdGVybl9ldXJvcGUuUm1kLgoKVGhlIGRhdGEgYXJlIHByb3ZpZGVkIGFzICoyMDE5IE5vdmVsIENvcm9uYXZpcnVzIENPVklELTE5ICgyMDE5LW5Db1YpIERhdGEgUmVwb3NpdG9yeSBieSBKb2hucyBIb3BraW5zIENTU0UqIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL0NTU0VHSVNhbmREYXRhL0NPVklELTE5KS4KClNlZSBodHRwczovL2dpdGh1Yi5jb20vcGhpbGlwcGUtZG9jb3VydC9DT1ZJRC0xOS9ibG9iL21hc3Rlci9SRUFETUUubWQgZm9yIG1vcmUgZGV0YWlscy4KCiMjIERhdGEgU291cmNlcwoKKiBBZ2dyZWdhdGVkIGRhdGEgc291cmNlczoKICAqIFdvcmxkIEhlYWx0aCBPcmdhbml6YXRpb24gKFdITyk6IGh0dHBzOi8vd3d3Lndoby5pbnQvCiAgKiBFdXJvcGVhbiBDZW50cmUgZm9yIERpc2Vhc2UgUHJldmVudGlvbiBhbmQgQ29udHJvbCAoRUNEQyk6IGh0dHBzOi8vd3d3LmVjZGMuZXVyb3BhLmV1L2VuL2dlb2dyYXBoaWNhbC1kaXN0cmlidXRpb24tMjAxOS1uY292LWNhc2VzIAogICogRFhZLmNuLiBQbmV1bW9uaWEuIDIwMjAuIGh0dHA6Ly8zZy5keHkuY24vbmV3aDUvdmlldy9wbmV1bW9uaWEKICAqIFVTIENEQzogaHR0cHM6Ly93d3cuY2RjLmdvdi9jb3JvbmF2aXJ1cy8yMDE5LW5jb3YvaW5kZXguaHRtbAogICogQk5PIE5ld3M6IGh0dHBzOi8vYm5vbmV3cy5jb20vaW5kZXgucGhwLzIwMjAvMDIvdGhlLWxhdGVzdC1jb3JvbmF2aXJ1cy1jYXNlcy8KICAqIFdvcmxkb01ldGVyczogaHR0cHM6Ly93d3cud29ybGRvbWV0ZXJzLmluZm8vY29yb25hdmlydXMvICAKICAqIDFQb2ludDNBcmNlczogaHR0cHM6Ly9jb3JvbmF2aXJ1cy4xcG9pbnQzYWNyZXMuY29tL2VuICAKICAqIENPVklEIFRyYWNraW5nIFByb2plY3Q6IGh0dHBzOi8vY292aWR0cmFja2luZy5jb20vZGF0YS4gKFVTIFRlc3RpbmcgYW5kIEhvc3BpdGFsaXphdGlvbiBEYXRhLiBXZSB1c2UgdGhlIG1heGltdW0gcmVwb3J0ZWQgdmFsdWUgZnJvbSAiQ3VycmVudGx5IiBhbmQgIkN1bXVsYXRpdmUiIEhvc3BpdGFsaXplZCBmb3Igb3VyIGhvc3BpdGFsaXphdGlvbiBudW1iZXIgcmVwb3J0ZWQgZm9yIGVhY2ggc3RhdGUuKQoKKiBVUyBkYXRhIHNvdXJjZXMgYXQgdGhlIHN0YXRlIChBZG1pbjEpIG9yIGNvdW50eS9jaXR5IChBZG1pbjIpIGxldmVsOiAgCiAgKiBXYXNoaW5ndG9uIFN0YXRlIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL3d3dy5kb2gud2EuZ292L2VtZXJnZW5jaWVzL2Nvcm9uYXZpcnVzCiAgKiBNYXJ5bGFuZCBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly9jb3JvbmF2aXJ1cy5tYXJ5bGFuZC5nb3YvCiAgKiBOZXcgWW9yayBTdGF0ZSBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly9oZWFsdGguZGF0YS5ueS5nb3YvSGVhbHRoL05ldy1Zb3JrLVN0YXRlLVN0YXRld2lkZS1DT1ZJRC0xOS1UZXN0aW5nL3hkc3MtdTUzZS9kYXRhCiAgKiBOWUMgRGVwYXJ0bWVudCBvZiBIZWFsdGggYW5kIE1lbnRhbCBIeWdpZW5lOiBodHRwczovL3d3dzEubnljLmdvdi9zaXRlL2RvaC9jb3ZpZC9jb3ZpZC0xOS1kYXRhLnBhZ2UgYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ueWNoZWFsdGgvY29yb25hdmlydXMtZGF0YQogICogRmxvcmlkYSBEZXBhcnRtZW50IG9mIEhlYWx0aCBEYXNoYm9hcmQ6IGh0dHBzOi8vc2VydmljZXMxLmFyY2dpcy5jb20vQ1kxTFh4bDl6bEplQnVSWi9hcmNnaXMvcmVzdC9zZXJ2aWNlcy9GbG9yaWRhX0NPVklEMTlfQ2FzZXMvRmVhdHVyZVNlcnZlci8wCiAgICBhbmQgaHR0cHM6Ly9mZG9oLm1hcHMuYXJjZ2lzLmNvbS9hcHBzL29wc2Rhc2hib2FyZC9pbmRleC5odG1sIy84ZDBkZTMzZjI2MGQ0NDRjODUyYTYxNWRjNzgzN2M4NgogICogQ29sb3JhZG86IGh0dHBzOi8vY292aWQxOS5jb2xvcmFkby5nb3YvY292aWQtMTktZGF0YQogICogVmlyZ2luaWE6IGh0dHBzOi8vd3d3LnZkaC52aXJnaW5pYS5nb3YvY29yb25hdmlydXMvCiAgKiBOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMgQ05NSSBEZXBhcnRtZW50IG9mIFB1YmxpYyBIZWFsdGg6IGh0dHBzOi8vY25taWNoY2MubWFwcy5hcmNnaXMuY29tL2FwcHMvb3BzZGFzaGJvYXJkL2luZGV4Lmh0bWwjLzQwNjFiNjc0ZmM5NjRlZmU4NGY3Nzc0Yjc5NzlkMmI1CiAgKiBNaXNzb3VyaSBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly93d3cuYXJjZ2lzLmNvbS9hcHBzL01hcFNlcmllcy9pbmRleC5odG1sP2FwcGlkPThlMDFhNWQ4ZDhiZDRiNGY4NWFkZDAwNmY5ZTE0YTlkCiAgKiBTdC4gTG91aXMgQ2l0eSBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly93d3cuc3Rsb3Vpcy1tby5nb3YvY292aWQtMTkvZGF0YS8jdG90YWxzQnlEYXRlCiAgKiBTdC4gTG91aXMgQ291bnR5OiBodHRwczovL3N0bGNvcm9uYS5jb20vcmVzb3VyY2VzL2NvdmlkLTE5LXN0YXRpc3RpY3MxLwogICogTWFzc2FjaHVzZXR0czogaHR0cHM6Ly93d3cubWFzcy5nb3YvaW5mby1kZXRhaWxzL2NvdmlkLTE5LXJlc3BvbnNlLXJlcG9ydGluZwogICogTWljaGlnYW46IGh0dHBzOi8vd3d3Lm1pY2hpZ2FuLmdvdi9jb3JvbmF2aXJ1cy8wLDk3NTMsNy00MDYtOTgxNjNfOTgxNzMtLS0sMDAuaHRtbCAKICAqIElsbGlub2lzIERlcGFydG1lbnQgb2YgUHVibGljIEhlYWx0aDogaHR0cHM6Ly9kcGguaWxsaW5vaXMuZ292L2NvdmlkMTkKICAqIEluZGlhbmEgU3RhdGUgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vaHViLm1waC5pbi5nb3YvZGF0YXNldD9xPUNPVklECiAgKiBDb25uZWN0aWN1dCBEZXBhcnRtZW50IG9mIFB1YmxpYyBIZWFsdGg6IGh0dHBzOi8vZGF0YS5jdC5nb3Yvc3Rvcmllcy9zL0NPVklELTE5LWRhdGEvd2EzZy10ZnZjLwogICogT2hpbyBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly9jb3JvbmF2aXJ1cy5vaGlvLmdvdi93cHMvcG9ydGFsL2dvdi9jb3ZpZC0xOS9ob21lCiAgKiBPcmVnb24gT2ZmaWNlIG9mIEVtZXJnZW5jeSBNYW5hZ2VtZW50OiBodHRwczovL2V4cGVyaWVuY2UuYXJjZ2lzLmNvbS9leHBlcmllbmNlL2ZmZjlmODM4MjdjNTQ2MTU4M2NkMDE0ZmRmNDU4N2RlCiAgKiBUZW5uZXNzZWUgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LnRuLmdvdi9oZWFsdGgvY2VkZXAvbmNvdi5odG1sCiAgKiBSaG9kZSBJc2xhbmQgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vcmktZGVwYXJ0bWVudC1vZi1oZWFsdGgtY292aWQtMTktZGF0YS1yaWhlYWx0aC5odWIuYXJjZ2lzLmNvbS8KICAqIFdpc2NvbnNpbiBEZXBhcnRtZW50IG9mIEhlYWx0aCBTZXJ2aWNlczogaHR0cHM6Ly93d3cuZGhzLndpc2NvbnNpbi5nb3YvY292aWQtMTkvZGF0YS5odG0KICAqIE5vcnRoIENhcm9saW5hIENpdHkgb2YgR3JlZW52aWxsZSBHSVM6IGh0dHBzOi8vd3d3LmFyY2dpcy5jb20vYXBwcy9vcHNkYXNoYm9hcmQvaW5kZXguaHRtbCMvN2FlYWM2OTVjYWZhNDA2NWJhMTUwNWIxY2ZhNzI3NDcKICAqIElvd2EgU3RhdGUgR292ZXJubWVudDogaHR0cHM6Ly9jb3JvbmF2aXJ1cy5pb3dhLmdvdi8KICAqIE1pbm5lc290YSBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly93d3cuaGVhbHRoLnN0YXRlLm1uLnVzL2Rpc2Vhc2VzL2Nvcm9uYXZpcnVzL3NpdHVhdGlvbi5odG1sCiAgKiBBbGFiYW1hIFNhbWZvcmQgVW5pdmVyc2l0eSdzIERlcGFydG1lbnQgb2YgR2VvZ3JhcGh5IGFuZCBTb2Npb2xvZ3k6IGh0dHBzOi8vZXhwZXJpZW5jZS5hcmNnaXMuY29tL2V4cGVyaWVuY2UvZTAzZjg3ZTQ4YTIzNGZlZWJiYWQyN2QwZWU3ZmY4MjQKICAqIE1pc3Npc3NpcHBpIFN0YXRlIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL21zZGgubXMuZ292L21zZGhzaXRlL19zdGF0aWMvMTQsMCw0MjAuaHRtbAogICogTmVicmFza2EgRGVwYXJ0bWVudCBvZiBIZWFsdGggYW5kIEh1bWFuIFNlcnZpY2VzOiBodHRwczovL2V4cGVyaWVuY2UuYXJjZ2lzLmNvbS9leHBlcmllbmNlL2VjZTBkYjA5ZGE0ZDRjYTY4MjUyYzM5NjdhYTFlOWRkCiAgKiBTb3V0aCBDYXJvbGluYSBEZXBhcnRtZW50IG9mIEhlYWx0aCBhbmQgRW52aXJvbm1lbnRhbCBDb250cm9sOiBodHRwczovL3NjZGhlYy5nb3YvaW5mZWN0aW91cy1kaXNlYXNlcy92aXJ1c2VzL2Nvcm9uYXZpcnVzLWRpc2Vhc2UtMjAxOS1jb3ZpZC0xOS9zYy10ZXN0aW5nLWRhdGEtcHJvamVjdGlvbnMtY292aWQtMTkKICAqIE5ldmFkYSBEZXBhcnRtZW50IG9mIEhlYWx0aCBhbmQgSHVtYW4gU2VydmljZXM6IGh0dHBzOi8vbnZoZWFsdGhyZXNwb25zZS5udi5nb3YvCiAgKiBOZXcgSmVyc2V5IERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL2NvdmlkMTkubmouZ292LwogICogRGVsYXdhcmUgRW1lcmdlbmN5IE1hbmFnZW1lbnQgQWdlbmN5OiBodHRwczovL2Nvcm9uYXZpcnVzLmRlbGF3YXJlLmdvdi8KICAqIFV0YWggRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vY29yb25hdmlydXMtZGFzaGJvYXJkLnV0YWguZ292LyNvdmVydmlldwogICogQXJpem9uYSBFbWVyZ2VuY3kgU3VwcG9ydCBGdW5jdGlvbiAoRVNGKS9SZWNvdmVyeSBTdXBwb3J0IEZ1bmN0aW9uIChSU0YpIE9wZXJhdGlvbnMgRGFzaGJvYXJkOiBodHRwczovL3d3dy5hcmNnaXMuY29tL2FwcHMvTWFwU2VyaWVzL2luZGV4Lmh0bWw/YXBwaWQ9NjJlNmJmYTY4MmEzNGU2YWFlOWQ5MjU1YWM4NjU0NjcKICAqIERlcGFydGFtZW50byBkZSBTYWx1ZCwgUHVlcnRvIFJpY286IGh0dHBzOi8vYmlvc2VndXJpZGFkLm1hcHMuYXJjZ2lzLmNvbS9hcHBzL29wc2Rhc2hib2FyZC9pbmRleC5odG1sIy9kNzMwOGMxYWJiNDc0N2U1ODQzMjlhZGYxMjE1MTI1ZQogICogQXJrYW5zYXMgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vZXhwZXJpZW5jZS5hcmNnaXMuY29tL2V4cGVyaWVuY2UvYzJlZjRhNGZjYmU1NDU4ZmJmMmU0OGEyMWU0ZmVjZTkKICAqIE1haW5lIERlcGFydG1lbnQgb2YgSGVhbHRoIGFuZCBIdW1hbiBTZXJ2aWNlczogaHR0cHM6Ly93d3cubWFpbmUuZ292L2RoaHMvbWVjZGMvaW5mZWN0aW91cy1kaXNlYXNlL2VwaS9haXJib3JuZS9jb3JvbmF2aXJ1cy9kYXRhLnNodG1sCiAgKiBQZW5uc3lsdmFuaWEgRGVwYXJ0bWVudCBvZiBIZWFsdGg6IGh0dHBzOi8vd3d3LmhlYWx0aC5wYS5nb3YvdG9waWNzL2Rpc2Vhc2UvY29yb25hdmlydXMvUGFnZXMvQ2FzZXMuYXNweAogICogQ2l0eSBvZiBQaGlsYWRlbHBoaWE6IGh0dHBzOi8vd3d3LnBoaWxhLmdvdi9wcm9ncmFtcy9jb3JvbmF2aXJ1cy1kaXNlYXNlLTIwMTktY292aWQtMTkvCiAgKiBMYW5jYXN0ZXIgQ291bnR5OiBodHRwczovL2NvdmlkLTE5LWxhbmNhc3RlcmNvdW50eXBhLmh1Yi5hcmNnaXMuY29tLwogICogQ2hlc3RlciBDb3VudHk6IGh0dHBzOi8vY2hlc2NvLm1hcHMuYXJjZ2lzLmNvbS9hcHBzL29wc2Rhc2hib2FyZC9pbmRleC5odG1sIy85NzUwODJkNTc5NDU0YzNjYTc4NzdkYjBhNDRlNjFjYQogICogTG91aXNpYW5hIERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwOi8vbGRoLmxhLmdvdi9jb3JvbmF2aXJ1cy8KICAqIEdvdmVybm1lbnQgb2YgVGhlIERpc3RyaWN0IG9mIENvbHVtYmlhOiBodHRwczovL2Nvcm9uYXZpcnVzLmRjLmdvdi9wYWdlL2Nvcm9uYXZpcnVzLWRhdGEgCgoqIE5vbi1VUyBkYXRhIHNvdXJjZXMgYXQgdGhlIGNvdW50cnkvcmVnaW9uIChBZG1pbjApIG9yIHN0YXRlL3Byb3ZpbmNlIChBZG1pbjEpIGxldmVsOgogICogTmF0aW9uYWwgSGVhbHRoIENvbW1pc3Npb24gb2YgdGhlIFBlb3BsZeKAmXMgUmVwdWJsaWMgb2YgQ2hpbmEgKE5IQyk6CiAgICBodHRwOi8vd3d3Lm5oYy5nb3YuY24veGNzL3lxdGIvbGlzdF9nemJkLnNodG1sCiAgKiBDaGluYSBDREMgKENDREMpOiBodHRwOi8vd2Vla2x5LmNoaW5hY2RjLmNuL25ld3MvVHJhY2tpbmd0aGVFcGlkZW1pYy5odG0KICAqIEhvbmcgS29uZyBEZXBhcnRtZW50IG9mIEhlYWx0aDogaHR0cHM6Ly93d3cuY2hwLmdvdi5oay9lbi9mZWF0dXJlcy8xMDI0NjUuaHRtbAogICogTWFjYXUgR292ZXJubWVudDogaHR0cHM6Ly93d3cuc3NtLmdvdi5tby9wb3J0YWwvCiAgKiBUYWl3YW4gQ0RDOiBodHRwczovL3NpdGVzLmdvb2dsZS5jb20vY2RjLmdvdi50dy8yMDE5bmNvdi90YWl3YW4/YXV0aHVzZXI9MAogICogR292ZXJubWVudCBvZiBDYW5hZGE6IGh0dHBzOi8vd3d3LmNhbmFkYS5jYS9lbi9wdWJsaWMtaGVhbHRoL3NlcnZpY2VzL2Rpc2Vhc2VzL2Nvcm9uYXZpcnVzLmh0bWwKICAqIEF1c3RyYWxpYSBHb3Zlcm5tZW50IERlcGFydG1lbnQgb2YgSGVhbHRoOiBodHRwczovL3d3dy5oZWFsdGguZ292LmF1L25ld3MvY29yb25hdmlydXMtdXBkYXRlLWF0LWEtZ2xhbmNlCiAgKiBDT1ZJRCBMaXZlIChBdXN0cmFsaWEpOiBodHRwczovL3d3dy5jb3ZpZGxpdmUuY29tLmF1LwogICogTWluaXN0cnkgb2YgSGVhbHRoIFNpbmdhcG9yZSAoTU9IKTogaHR0cHM6Ly93d3cubW9oLmdvdi5zZy9jb3ZpZC0xOQogICogSXRhbHkgTWluaXN0cnkgb2YgSGVhbHRoOiBodHRwOi8vd3d3LnNhbHV0ZS5nb3YuaXQvbnVvdm9jb3JvbmF2aXJ1cwogICogRGF0aSBDT1ZJRC0xOSBJdGFsaWEgKEl0YWx5KTogaHR0cHM6Ly9naXRodWIuY29tL3BjbS1kcGMvQ09WSUQtMTkvdHJlZS9tYXN0ZXIvZGF0aS1yZWdpb25pCiAgKiBGcmVuY2ggR292ZXJubWVudDogaHR0cHM6Ly9kYXNoYm9hcmQuY292aWQxOS5kYXRhLmdvdXYuZnIvIGFuZCBodHRwczovL2dpdGh1Yi5jb20vb3BlbmNvdmlkMTktZnIvZGF0YS9ibG9iL21hc3Rlci9kaXN0L2NoaWZmcmVzLWNsZXMuanNvbgogICogT3BlbkNPVklEMTkgRnJhbmNlOiBodHRwczovL2dpdGh1Yi5jb20vb3BlbmNvdmlkMTktZnIKICAqIFBhbGVzdGluZSAoV2VzdCBCYW5rIGFuZCBHYXphKTogaHR0cHM6Ly9jb3JvbmEucHMvZGV0YWlscwogICogSXNyYWVsOiBodHRwczovL2dvdmV4dHJhLmdvdi5pbC9taW5pc3RyeS1vZi1oZWFsdGgvY29yb25hL2Nvcm9uYS12aXJ1cy8KICAqIE1pbmlzdHJ5IG9mIEhlYWx0aCwgUmVwdWJsaWMgb2YgS29zb3ZvOiBodHRwczovL2tvc292YS5oZWFsdGgvIGFuZCBodHRwczovL2Nvdmlka3MuczMuYW1hem9uYXdzLmNvbS9kYXRhLmpzb24KICAqIEJlcmxpbmVyIE1vcmdlbnBvc3QgKEdlcm1hbnkpOiBodHRwczovL2ludGVyYWt0aXYubW9yZ2VucG9zdC5kZS9jb3JvbmEtdmlydXMta2FydGUtaW5mZWt0aW9uZW4tZGV1dHNjaGxhbmQtd2VsdHdlaXQvCiAgKiBydHZlIChTcGFpbik6IGh0dHBzOi8vd3d3LnJ0dmUuZXMvbm90aWNpYXMvMjAyMDA1MTQvbWFwYS1kZWwtY29yb25hdmlydXMtZXNwYW5hLzIwMDQ2ODEuc2h0bWwKICAqIE1pbmlzdHJ5IG9mIEhlYWx0aCwgUmVwdWJsaWMgb2YgU2VyYmlhOiBodHRwczovL2NvdmlkMTkucnMvaG9tZXBhZ2UtZW5nbGlzaC8gCiAgKiBDaGlsZTogaHR0cHM6Ly93d3cubWluc2FsLmNsL251ZXZvLWNvcm9uYXZpcnVzLTIwMTktbmNvdi9jYXNvcy1jb25maXJtYWRvcy1lbi1jaGlsZS1jb3ZpZC0xOS8KICAqIEJyYXppbCBNaW5pc3RyeSBvZiBIZWFsdGg6IGh0dHBzOi8vY292aWQuc2F1ZGUuZ292LmJyLwogICogQnJhemlsOiBodHRwczovL2dpdGh1Yi5jb20vd2NvdGEvY292aWQxOWJyLiBEYXRhIGRlc2NyaWJlZCBpbiBbRE9JOiAxMC4xNTkwL1NjaUVMT1ByZXByaW50cy4zNjJdKGh0dHBzOi8vZG9pLm9yZy8xMC4xNTkwL1NjaUVMT1ByZXByaW50cy4zNjIpCiAgKiBHb2JpZXJvbm8gRGUgTWV4aWNvOmh0dHBzOi8vY292aWQxOS5zaW5hdmUuZ29iLm14LwogICogSmFwYW4gQ09WSUQtMTkgQ29yb25hdmlydXMgVHJhY2tlcjogaHR0cHM6Ly9jb3ZpZDE5amFwYW4uY29tLyNhbGwtcHJlZmVjdHVyZXMKICAqIE1vbml0b3JlbyBkZWwgQ09WSUQtMTkgZW4gUGVyw7ogLSAgUG9saWPDrWEgTmFjaW9uYWwgZGVsIFBlcsO6IChQTlApIC0gRGlyZWNjacOzbiBkZSBJbnRlbGlnZW5jaWEgKERJUklOKTogaHR0cHM6Ly93d3cuYXJjZ2lzLmNvbS9hcHBzL29wc2Rhc2hib2FyZC9pbmRleC5odG1sIy9mOTBhN2E4N2FmMjU0ODY5OWQ2ZTdiYjcyZjU1NDdjMiBhbmQgTWluaXN0ZXJpbyBkZSBTYWx1ZCBkZWwgUGVyw7o6IGh0dHBzOi8vY292aWQxOS5taW5zYS5nb2IucGUvc2FsYV9zaXR1YWNpb25hbC5hc3AKICBDb2xvbWJpYSBOYXRpb25hbCBJbnN0aXR1dGUgb2YgSGVhbHRoOiBodHRwOi8vd3d3Lmlucy5nb3YuY28vTm90aWNpYXMvUGFnaW5hcy9Db3JvbmF2aXJ1cy5hc3B4CiAgUnVzc2lhOiBodHRwczovL3huLS04MGFlc2ZwZWJhZ21mYmxjMGEueG4tLXAxYWkvaW5mb3JtYXRpb24vCiAgVWtyYWluZTogaHR0cHM6Ly9jb3ZpZDE5LnJuYm8uZ292LnVhLwogIFB1YmxpYyBIZWFsdGggQWdlbmN5IG9mIFN3ZWRlbjogaHR0cHM6Ly9leHBlcmllbmNlLmFyY2dpcy5jb20vZXhwZXJpZW5jZS8wOWY4MjE2NjdjZTY0YmY3YmU2ZjlmODc0NTdlZDlhYQogIEluZGlhIE1pbmlzdHJ5IG9mIEhlYWx0aCBhbmQgRmFtaWx5IFdlbGZhcmU6IGh0dHBzOi8vd3d3Lm1vaGZ3Lmdvdi5pbi8KICBHb3Zlcm5tZW50IG9mIFBha2lzdGFuOiBodHRwOi8vY292aWQuZ292LnBrL3N0YXRzL3Bha2lzdGFuCiAgVGhlIFVLIEdvdmVybm1lbnQ6IGh0dHBzOi8vY29yb25hdmlydXMuZGF0YS5nb3YudWsvI2NhdGVnb3J5PW5hdGlvbnMmbWFwPXJhdGUKICBTY290dGlzaCBHb3Zlcm5tZW50OiBodHRwczovL3d3dy5nb3Yuc2NvdC9wdWJsaWNhdGlvbnMvY29yb25hdmlydXMtY292aWQtMTktdHJlbmRzLWluLWRhaWx5LWRhdGEvCiAgTmV0aGVybGFuZHMgTmF0aW9uYWwgSW5zdGl0dXRlIGZvciBIZWFsdGggYW5kIEVudmlyb25tZW50OiBodHRwczovL2V4cGVyaWVuY2UuYXJjZ2lzLmNvbS9leHBlcmllbmNlL2VhMDY0MDQ3NTE5MDQwNDY5YWNiOGRhMDVjMGYxMDBkCiAgSWNlbGFuZCBUaGUgRGlyZWN0b3JhdGUgb2YgSGVhbHRoIGFuZCBUaGUgRGVwYXJ0bWVudCBvZiBDaXZpbCBQcm90ZWN0aW9uIGFuZCBFbWVyZ2VuY3kgTWFuYWdlbWVudDogaHR0cHM6Ly93d3cuY292aWQuaXMvZGF0YQoKIyMgVGVybXMgb2YgVXNlCgoqIERhdGEgOiBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDQuMCBJbnRlcm5hdGlvbmFsIChDQyBCWSA0LjApIGJ5IHRoZSBKb2hucyBIb3BraW5zIFVuaXZlcnNpdHkgb24gYmVoYWxmIG9mIGl0cyBDZW50ZXIgZm9yIFN5c3RlbXMgU2NpZW5jZSBpbiBFbmdpbmVlcmluZy4gIENvcHlyaWdodCBKb2hucyBIb3BraW5zIFVuaXZlcnNpdHkgMjAyMC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9DU1NFR0lTYW5kRGF0YS9DT1ZJRC0xOS9ibG9iL21hc3Rlci9SRUFETUUubWQuCiogU291cmNlIGNvZGUgZm9yIGdlbmVyYXRpbmcgZ3JhcGhzOiBDb3B5cmlnaHQgUGhpbGlwcGUgRG9jb3VydC4gTGljZW5zZWQgdW5kZXIgTUlUIExpY2Vuc2UuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGhpbGlwcGUtZG9jb3VydC9DT1ZJRC0xOS9ibG9iL21hc3Rlci9jb3ZpZF8xOV93ZXN0ZXJuX2V1cm9wZS5SbWQuCiogR3JhcGhpY3MgOiBQdWJsaWMgRG9tYWluCgo=